/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pt.utl.ist.isr.livetrack.server.interfaces;

import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;

/**
 *
 * @author David Miguel Antunes <davidmiguel [ at ] antunes.net>
 */
public interface Camera {

    public String getId();

    public String getType();

    public String getZoneId();

    public void setZoneId(String zoneId);

    // Actions:
    public void acquireImage();

    // Settings:
    public int getBinaryThreshold();

    public void setBinaryThreshold(int binaryThreshold);

    public boolean isApplyMorphologicalClosing();

    public void setApplyMorphologicalClosing(boolean applyMorphologicalClosing);

    public int getKernelHeight();

    public void setKernelHeight(int kernelHeight);

    public int getKernelWidth();

    public void setKernelWidth(int kernelWidth);

    public int getMaxBlobActivePixels();

    public void setMaxBlobActivePixels(int maxBlobActivePixels);

    public int getMaxBlobArea();

    public void setMaxBlobArea(int maxBlobArea);

    public int getMinBlobActivePixels();

    public void setMinBlobActivePixels(int minBlobActivePixels);

    public int getMinBlobArea();

    public void setMinBlobArea(int minBlobArea);

    public boolean isOptimizeClosing();

    public void setOptimizeClosing(boolean optimizeClosing);

    public Rectangle2D getRoi();

    public void setRoi(Rectangle2D roi);

    public RoiType getRoiType();

    public void setRoiType(RoiType roiType);
    // Outputs:

    public int getWidth();

    public int getHeight();

    public int getNComp();

    public BufferedImage getImage();

    public byte[] getImageAsByteArray();

    public int[] getImageAsIntArray();

    public BufferedImage getBackground();

    public byte[] getBackgroundAsByteArray();

    public int[] getBackgroundAsIntArray();

    public BufferedImage getSubtracted();

    public byte[] getSubtractedAsByteArray();

    public int[] getSubtractedAsIntArray();

    public BufferedImage getBinary();

    public byte[] getBinaryAsByteArray();

    public int[] getBinaryAsIntArray();

    public ArrayList<Blob> getBlobs();

    @Override
    public boolean equals(Object obj);

    @Override
    public int hashCode();
}
